package com.learn.singleton001;

import java.util.concurrent.TimeUnit;

/**
 * 特点：懒汉模式(多线程不安全)
 * @author 1
 */
public class SingleObjectNotSafe {

    /**
     * 小明： 老王，开始上课吧
     * 老王： 好的，我们先创建一个静态的实例对象，记住赋值 null。 还有，下次称呼老师，不许叫老王！！！
     */
    private static SingleObjectNotSafe instance = null;

    /**
     * 小明： 老。。。老师，我们这个构造函数为啥设置为private呢？
     * 老王： 问的非常好，这就是单例模式的特点。这个私有化，别人就不能随便new来创建对象了。你说好不好？
     * 小明： 太好了，别人总是随便new对象，搞得对象是免费不要钱似的，这样不太好。
     * 老王： 你的理解很独特嘛！！！
     */
    private SingleObjectNotSafe(){
    }

    /**
     * 小明： 老。。。老师，你看，我这里提供了一个方法，供大家来获取对象。
     * 老王： 嗯，人家获取对象的时候，你要判断下，如果已经存在对象了，就直接给他。不要再给他new新的啦。
     * 小明： 好的。老。。。老师。
     */
    public static SingleObjectNotSafe getInstance() {
        /**
         * 小明嘀咕：
         * 这里如果多线程，并发同时执行的时候，那就存在漏网之鱼，我就会给他new新的对象了。算了，先不管了。
         *  线程不安全，这个以后自己不要用。谁用谁傻瓜！！！
         */
        if (instance == null) {
            try {
                //模拟操作中的停顿
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            instance = new SingleObjectNotSafe();
        }
        return instance;
    }

    /**
     * 小明： 我们拿到对象了，要干点正事吧！！！
     * 老王： 是的，说的对，看我的！！！
     */
    public void showMessage(){
        System.out.println("嘿嘿嘿");
    }


}
